package algorithme;


import programme.Programme;
import programme.Solution;
import solveur.SolverInterface;

/**
 * Classe abstraite dont héritent les différentes classes d'algorithme (Recuit, VNS, ...).
 * 
 *
 */
public abstract class Algorithme<T> {

	/** Solveur pouvant être utilisé par l'algorithme */
	protected SolverInterface solver;
	
	/** Programme sur lequel tourne l'algorithme */
	protected T prog;

	/** Solution trouvée par l'algorithme pour chaque vecteur de variable du problème*/
	protected Solution solution;
	/**
	 * Méthode de lancement de l'algorithme
	 * @return Vrai si l'algorithme termine correctement, faux sinon.
	 * @throws Exception 
	 */
	public abstract Solution lancer() throws Exception;

	
	public SolverInterface getSolver() {
		return solver;
	}

	public void setSolver(SolverInterface solver) {
		this.solver = solver;
	}

	public T getPl() {
		return prog;
	}

	public void setPl(T pl) {
		this.prog = pl;
	}
	
}
